#include "main.h"

int main (void){
	SDL_Surface *ecran = NULL, *menu = NULL, *icone = NULL;
	SDL_Rect positionMenu;
	SDL_Event event;

	int continuer = 1;

	SDL_Init(SDL_INIT_VIDEO);

	icone = IMG_Load("icone.bmp");
	SDL_SetColorKey(icone, SDL_SRCCOLORKEY, SDL_MapRGB(icone->format, 62, 142, 171));
	SDL_WM_SetIcon(icone, NULL);
	SDL_FreeSurface(icone);

	ecran = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE+ESPACE_MENU, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
	SDL_WM_SetCaption("Koh-Lantaupe", NULL);

	menu = IMG_Load("menu.jpg");
	positionMenu.x = 0;
	positionMenu.y = 0;

	SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
	SDL_Flip(ecran);

	while (continuer)
	{
		SDL_WaitEvent(&event);
		switch(event.type)
		{
			case SDL_QUIT:
				 continuer = 0;
				 break;
			case SDL_KEYDOWN:
				switch(event.key.keysym.sym)
				{
					case SDLK_ESCAPE: // Veut arrêter le jeu
					    continuer = 0;
					    break;
					case SDLK_F1: // Demande à jouer
					    difficulte(ecran);
					    break;
					/*case SDLK_KP2: // Demande l'éditeur de niveaux
					    editeur(ecran);
					    break;*/
				}
			 break;
		}

		// Effacement de l'écran
		//SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
		//SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
		//SDL_Flip(ecran);
	}

	SDL_FreeSurface(menu);
	SDL_Quit();

    return EXIT_SUCCESS;

}

void difficulte(SDL_Surface* ecran){

	SDL_Surface *menu = NULL;
	SDL_Event event;
	SDL_Rect positionMenu;
	int continuer = 1;

	menu = IMG_Load("difficulte.bmp");
	positionMenu.x = 0;
	positionMenu.y = 0;

	SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 161, 161, 160));
	SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
	SDL_Flip(ecran);
	int eDifficulte;
	while (continuer)
	{
		SDL_WaitEvent(&event);
		switch(event.type)
		{
			case SDL_QUIT:
				continuer = 0;
				break;
			case SDL_KEYDOWN:
				switch(event.key.keysym.sym)
				{
					case SDLK_ESCAPE:
						continuer = 0;
						break;
					case SDLK_F1:
						jouer(ecran,1);
						break;
					case SDLK_F2:
						jouer(ecran,2);
						break;
					case SDLK_F3:
						jouer(ecran,3);
						break;
				}
				break;
		}
	}

}


void jouer(SDL_Surface* ecran, int eDifficulte){

	SDL_Surface *menu = NULL;
	SDL_Event event;
	SDL_Rect positionMenu;
	int continuer = 1;

	menu = IMG_Load("joueurs.bmp");
	positionMenu.x = 0;
	positionMenu.y = 0;

	SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 161, 161, 160));
	SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
	SDL_Flip(ecran);

	while (continuer)
	{
		SDL_WaitEvent(&event);
		switch(event.type)
		{
			case SDL_QUIT:
				continuer = 0;
				break;
			case SDL_KEYDOWN:
				switch(event.key.keysym.sym)
				{
					case SDLK_ESCAPE:
						continuer = 0;
						break;
					case SDLK_F2:
						eEcrireNombreJoueur(ecran,2,eDifficulte);
						break;
					case SDLK_F3:
						eEcrireNombreJoueur(ecran,3,eDifficulte);
						break;
					case SDLK_F4:
						eEcrireNombreJoueur(ecran,4,eDifficulte);
						break;
				}
			   break;
		}
	}

}

void eEcrireNombreJoueur (SDL_Surface* ecran, int eNombreJoueur, int eDifficulte){
	int eTour=0;
	int eNombreJoueurIncremente;
	int eNombreJoueurIncrementeTour;
	int eNumEquipe=0;
	char temps[50] = "";
	char temps2[100] = "";

	SDL_Surface *SDL_Texte = NULL;

	outil_amorcer();
	outil_init();
	Alea0();

	SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
	SDL_Flip(ecran);

	t_motte** pMotte= Vue_init();
	Vue_bord(pMotte);

	int* classement=Palmares_init(eNombreJoueur);

	Nourriture_init(pMotte,eTour, eDifficulte);

	t_liste** pRattaupe = Rattaupes_init(pMotte,	eNombreJoueur);

	Vue_afficher(pMotte,ecran);
	SDL_Flip(ecran);

	for(eNombreJoueurIncrementeTour=0;eNombreJoueurIncrementeTour<eNombreJoueur;eNombreJoueurIncrementeTour++){
		while(!liste_vide(pRattaupe[eNombreJoueurIncrementeTour])){
			sprintf(temps, "Tour n°%i de Koh-Lantaupe !",eTour+1);
			SDL_Ecrire(ecran, SDL_Texte, 50, temps, 5, HAUTEUR_FENETRE+5);
			SDL_Flip(ecran);
			for(eNombreJoueurIncremente=0;eNombreJoueurIncremente<eNombreJoueur;eNombreJoueurIncremente++){
				if(!liste_vide(pRattaupe[eNombreJoueurIncremente])){
					sprintf(temps2, "Joueur de l'équipe n°%i, à vous de jouer !",eNombreJoueurIncremente+1);
					SDL_Ecrire(ecran, SDL_Texte, 100, temps2, 5, HAUTEUR_FENETRE+20);
					SDL_Flip(ecran);
					TourSuivant(pMotte,pRattaupe[eNombreJoueurIncremente],pRattaupe,eTour,eNombreJoueur,classement,ecran,eDifficulte);
				}
			}
			eTour++;
			Palmares_Incremente(pRattaupe, eNombreJoueur, classement);
		}
	}

	Palmares_Afficher (eNombreJoueur, classement, ecran);
	MemoireVider(pMotte, pRattaupe, eNombreJoueur,classement);

}

void TourSuivant(t_motte** pMotte, t_liste* pRattaupe, t_liste** ptabRattaupe, int eTour, int eNombreJoueur, int* classement, SDL_Surface* ecran, int eDifficulte){
	//Définit les actions pour chaque tour
	Nourriture_init(pMotte,eTour,eDifficulte);
	Sante_decremente(pRattaupe,eTour);
	Nourriture_decremente(pMotte);
	Mort_Rattaupe(pMotte,pRattaupe,ecran);
	Enceinte_incremente(pRattaupe,eTour);
	Reproduction_init(pRattaupe, pMotte,ecran);
	Accouchement(pRattaupe,pMotte,ecran);
	Rattaupe_Grandis(pRattaupe);
	Scene_Tour_Suivant(pRattaupe,pMotte,ecran);
}

void MemoireVider(t_motte** pMotte, t_liste** pRattaupe, int eNombreJoueur, int* classement){
	int eNombreJoueurIncremente;
	int eLigne,eColonne;

	for(eNombreJoueurIncremente=0;eNombreJoueurIncremente<eNombreJoueur;eNombreJoueurIncremente++){
		free(pRattaupe[eNombreJoueurIncremente]);
	}

	for(eLigne=0;eLigne<elmax;eLigne++){
		free(pMotte[eLigne]);
	}
	free(pRattaupe);
	free(pMotte);
	free(classement);
}

